package com.xzsoft.gdwz.services.impl;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.UUID;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.xzsoft.gdwz.dao.CcidDao;
import com.xzsoft.gdwz.model.Ccid;
import com.xzsoft.gdwz.model.ValueBean;
import com.xzsoft.gdwz.services.CcidService;
import com.xzsoft.gdwz.services.ValueService;
/**
 * 
  * @ClassName CcidServiceImpl
  * @Description CCID接口实现类
  * @author RenJianJian
  * @date 2017年4月25日 下午3:01:40
 */
@Service("ccidService")
public class CcidServiceImpl implements CcidService {
	@Autowired
	private ValueService valueService;
	@Autowired
	private CcidDao ccidDao;

	SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
	@Override
	public void checkMaterialClass(Ccid ccid) throws Exception {
		try {
			String comName = ccid.getComId();//项目单位名称（账套名称）
			//判断项目单位是否存在
			if(ccid.getComId() == null || "".equals(ccid.getComId()))
				throw new Exception("项目单位不能为空！");
			else{
				String comId = ccidDao.selectOrgIdByOrgName(ccid.getComId());
				if(comId == null || "".equals(comId))
					throw new Exception("项目单位“" + ccid.getComId() + "”不存在！");
				else
					ccid.setComId(comId);
			}
			//判断当前用户是否配置组织信息
			if(ccid.getCreatedBy() == null || "".equals(ccid.getCreatedBy()))
				throw new Exception("当前用户不能为空！");
			else{
				HashMap<String,String> userMap = new HashMap<String,String>();
				userMap.put("createdBy",ccid.getCreatedBy());
				userMap.put("comId",ccid.getComId());
				String userInfo = ccidDao.whetherExistOrgInfo(userMap);
				if(userInfo == null || "".equals(userInfo))
					throw new Exception("当前用户没有当前项目单位的权限，请联系管理员配置组织信息！");
				else
					ccid.setCreatedBy(userInfo);
			}
			//判断项目单位配置信息	
			HashMap<String,String> orgMap = ccidDao.selectOtherOrgInfoByOrgId(ccid.getComId());
			if(orgMap == null || "".equals(orgMap))
				throw new Exception("项目单位尚未配置配送中心、分公司、集团信息，请联系管理员配置相关信息！");
			else{
				if("0".equals(orgMap.get("orgId1")) || "0".equals(orgMap.get("orgId2"))
						|| "0".equals(orgMap.get("orgId3")) || "0".equals(orgMap.get("orgId4")))
					throw new Exception("项目单位尚未配置配送中心、分公司、集团信息，请联系管理员配置相关信息！");
			}
			//判断专业部门是否为空
			if(ccid.getCompanyDeptId() == null || "".equals(ccid.getCompanyDeptId()))
				throw new Exception("专业部门不能为空！");
			else{
				HashMap<String,String> deptMap = new HashMap<String,String>();
				deptMap.put("companyDeptId",ccid.getCompanyDeptId());
				deptMap.put("comName",comName);
				String deptId = ccidDao.selectDeptIdByDeptName(deptMap);
				if(deptId == null || "".equals(deptId))
					throw new Exception("该项目单位所属分子公司下没有“" + ccid.getCompanyDeptId() + "”部门！");
				else
					ccid.setCompanyDeptId(deptId);;
			}
			//判断使用部门是否为空
			if(ccid.getDemandDp() == null || "".equals(ccid.getDemandDp()))
				throw new Exception("使用部门不能为空！");
			//需求计划名称
			if(ccid.getPrName() == null || "".equals(ccid.getPrName()))
				throw new Exception("需求计划名称不能为空！");
			//物资编码
			if(ccid.getMtCode() == null || "".equals(ccid.getMtCode()))
				throw new Exception("物资编码不能为空！");
			//物资名称
			if(ccid.getMtName() == null || "".equals(ccid.getMtName()))
				throw new Exception("物资名称不能为空！");
			else
				if(ccid.getMtName().length() > 46)
					throw new Exception("物资名称长度不能超过46个字符！");
			//物资类别
			if(ccid.getMtType() == null || "".equals(ccid.getMtType()))
				throw new Exception("物资类别不能为空！");
			//规格
			if(ccid.getReqSpec() == null || "".equals(ccid.getReqSpec()))
				throw new Exception("规格不能为空！");
			//型号
			if(ccid.getReqModel() == null || "".equals(ccid.getReqModel()))
				throw new Exception("型号不能为空！");
			//计量单位
			if(ccid.getReqUnit() == null || "".equals(ccid.getReqUnit()))
				throw new Exception("计量单位不能为空！");
			else{
				if(ccid.getReqUnit().length() > 11)
					throw new Exception("计量单位的长度不能超过11个字符！");
				/*else{
					List<ValueBean> jldwValueList = valueService.getValuesBySetCode("JLDW");//计量单位
					boolean jldwValueFlag = false;
					for (ValueBean jldwValue : jldwValueList) {//计量单位
						if(ccid.getReqUnit().equals(jldwValue.getValName())){
							ccid.setReqUnit(jldwValue.getValCode());
							jldwValueFlag = true;
							break;//退出for循环
						}
					}
					if(!jldwValueFlag)
						throw new Exception("计量单位" + ccid.getReqUnit() + "不存在！");
				}*/
			}
			//需求数量
			if(String.valueOf(ccid.getReqQuantity()) == null || "".equals(String.valueOf(ccid.getReqQuantity())) || ccid.getReqQuantity() <= 0)
				throw new Exception("需求数量最小值为0.01！");
			//预算单价
			if(String.valueOf(ccid.getReqBudgetPrice()) == null || "".equals(String.valueOf(ccid.getReqBudgetPrice())) || ccid.getReqBudgetPrice() <= 0)
				throw new Exception("预算单价最小值为0.01！");
			ccid.setBudAmount(String.valueOf(ccid.getReqQuantity() * ccid.getReqBudgetPrice()));
			//要求到货时间
			if(ccid.getReqDate() == null || "".equals(ccid.getReqDate()))
				throw new Exception("要求到货时间不能为空！");
			else{
				String nowDate = sdf.format(new Date());
				String year = nowDate.substring(0,4);//年
				String month = nowDate.substring(5,7);//月
				if("12".equals(month)){
					year = String.valueOf(Integer.parseInt(year) + 1);
					month = "01";
				}
				String date = year + "-" + month + "-" + "01";
				//月度计划
				if("月度计划".equals(ccid.getReqPlanType())
						&& date.compareTo(ccid.getReqDate()) > 0){
					throw new Exception("月度计划要求到货时间必须大于下月1号！");
				}
			}
			//计划类别
			if(ccid.getReqPlanCategory() != null && !"".equals(ccid.getReqPlanCategory())){
				List<ValueBean> reqPlanCategoryValueList = valueService.getValuesBySetCode("REQ_PLAN_CATEGORY");//计划类别
				boolean reqPlanCategoryValueFlag = false;
				for (ValueBean reqPlanCategoryValue : reqPlanCategoryValueList) {//计划类别
					if(ccid.getReqPlanCategory().equals(reqPlanCategoryValue.getValName())){
						ccid.setReqPlanCategory(reqPlanCategoryValue.getValCode());
						reqPlanCategoryValueFlag = true;
						break;//退出for循环
					}
				}
				if(!reqPlanCategoryValueFlag)
					throw new Exception("计划类别" + ccid.getReqPlanCategory() + "不存在！");
			}
			//计划类型
			if(ccid.getReqPlanType() == null || "".equals(ccid.getReqPlanType()))
				throw new Exception("计划类型不能为空！");
			else{
				List<ValueBean> reqPlanTypeValueList = valueService.getValuesBySetCode("REQ_PLAN_TYPE");//计划类型
				boolean reqPlanTypeValueFlag = false;
				for (ValueBean reqPlanTypeValue : reqPlanTypeValueList) {//计划类型
					if(ccid.getReqPlanType().equals(reqPlanTypeValue.getValName())){
						ccid.setReqPlanType(reqPlanTypeValue.getValCode());
						reqPlanTypeValueFlag = true;
						break;//退出for循环
					}
				}
				if(!reqPlanTypeValueFlag)
					throw new Exception("计划类型" + ccid.getReqPlanType() + "不存在！");
				//紧急计划、自行采购
				if("2".equals(ccid.getReqPlanType()) || "4".equals(ccid.getReqPlanType())){
					if((ccid.getReviewMethod() == null || "".equals(ccid.getReviewMethod()))
							&& !"单一来源".equals(ccid.getZhicaiFs()))
						throw new Exception("评审方法不能为空！");
					if(ccid.getZhicaiFs() == null || "".equals(ccid.getZhicaiFs()))
						throw new Exception("当计划类型为紧急计划、自行采购时,采购方式不能为空！");
					else{
						List<ValueBean> recomInqTypeValueList = valueService.getValuesBySetCode("RECOM_INQ_TYPE");//采购方式
						boolean recomInqTypeValueFlag = false;
						for (ValueBean recomInqTypeValue : recomInqTypeValueList) {//采购方式
							if(ccid.getZhicaiFs().equals(recomInqTypeValue.getValName())){
								ccid.setZhicaiFs(recomInqTypeValue.getValCode());
								recomInqTypeValueFlag = true;
								break;//退出for循环
							}
						}
						if(!recomInqTypeValueFlag)
							throw new Exception("采购方式" + ccid.getZhicaiFs() + "不存在！");
					}
					if(String.valueOf(ccid.getInqAmount()) == null || "".equals(String.valueOf(ccid.getInqAmount())))
						throw new Exception("当计划类型为紧急计划、自行采购时,采购金额不能为空！");
					if(ccid.getAttribute10() == null || "".equals(ccid.getAttribute10()))
						throw new Exception("当计划类型为紧急计划、自行采购时,供应商不能为空！");
				}
				//紧急计划
				if("2".equals(ccid.getReqPlanType())){
					if(ccid.getEmergencyReason() == null || "".equals(ccid.getEmergencyReason()))
						throw new Exception("当计划类型为紧急计划,必须填写紧急计划原因！");
					else{
						boolean emergencyReasonFlag = false;
						List<ValueBean> emergencyReasonValueList = valueService.getValuesBySetCode("EMERGENCY_REASON");//紧急计划原因
						for (ValueBean emergencyReasonValue : emergencyReasonValueList) {//计划类型
							if(ccid.getEmergencyReason().equals(emergencyReasonValue.getValName())){
								ccid.setEmergencyReason(emergencyReasonValue.getValCode());
								emergencyReasonFlag = true;
								break;//退出for循环
							}
						}
						if(!emergencyReasonFlag)
							throw new Exception("紧急计划原因" + ccid.getEmergencyReason() + "不存在！");
					}
				}
				//月度计划
				if("1".equals(ccid.getReqPlanType())){
					if(ccid.getPrMonth() != null && !"".equals(ccid.getPrMonth())){
						if(ccid.getPrMonth().length() != 7)
							throw new Exception("计划月份格式必须为" + "“yyyy-mm”");
						else{
							if(!"-".equals(ccid.getPrMonth().substring(4,5))
									|| Integer.valueOf(ccid.getPrMonth().substring(5,7)) > 12
									|| Integer.valueOf(ccid.getPrMonth().substring(5,7)) < 1)
								throw new Exception("计划月份格式不正确！");
						}
					}
				}
				//月度计划、临时采购
				if("1".equals(ccid.getReqPlanType()) || "3".equals(ccid.getReqPlanType())){
					if((ccid.getReviewMethod() == null || "".equals(ccid.getReviewMethod()))
							&& !"单一来源".equals(ccid.getRecomInqType()))
						throw new Exception("评审方法不能为空！");
				}
			}
			//费用类型
			if(ccid.getFyType() != null && !"".equals(ccid.getFyType())){
				List<ValueBean> fyTypeValueList = valueService.getValuesBySetCode("FY_TYPE");//费用类型
				boolean fyTypeValueFlag = false;
				for (ValueBean fyTypeValue : fyTypeValueList) {//费用类型
					if(ccid.getFyType().equals(fyTypeValue.getValName())){
						ccid.setFyType(fyTypeValue.getValCode());
						fyTypeValueFlag = true;
						break;//退出for循环
					}
				}
				if(!fyTypeValueFlag)
					throw new Exception("费用类型" + ccid.getFyType() + "不存在！");
			}
			if("1".equals(ccid.getReqPlanType()) || "3".equals(ccid.getReqPlanType())){//月度上报和年度上报主要区别就是计划类型不同
				//推荐采购方式
				if(ccid.getRecomInqType() == null || "".equals(ccid.getRecomInqType()))
					throw new Exception("推荐采购方式不能为空！");
				else{
					List<ValueBean> recomInqTypeValueList = valueService.getValuesBySetCode("RECOM_INQ_TYPE");//推荐采购方式
					boolean recomInqTypeValueFlag = false;
					for (ValueBean recomInqTypeValue : recomInqTypeValueList) {//推荐采购方式
						if(ccid.getRecomInqType().equals(recomInqTypeValue.getValName())){
							ccid.setRecomInqType(recomInqTypeValue.getValCode());
							recomInqTypeValueFlag = true;
							break;//退出for循环
						}
					}
					if(!recomInqTypeValueFlag)
						throw new Exception("推荐采购方式" + ccid.getRecomInqType() + "不存在，只有询价，竞争性谈判，单一来源，长协采购！");
					else{
						//竞争性谈判
						if("2".equals(ccid.getRecomInqType())){
							if(ccid.getRecomInqReason() == null || "".equals(ccid.getRecomInqReason()))
								throw new Exception("推荐采购方式为竞争性谈判时，推荐采购方式原因不能为空！");
							else{
								if(ccid.getRecomInqReason() != null && !"".equals(ccid.getRecomInqReason())){
									List<ValueBean> recomInqReasonJJValueList = valueService.getValuesBySetCode("RECOM_INQ_REASON_JJ");//原因
									boolean recomInqReasonJJValueFlag = false;
									for (ValueBean recomInqReasonJJValue : recomInqReasonJJValueList) {//原因
										if(ccid.getRecomInqReason().equals(recomInqReasonJJValue.getValName())){
											ccid.setRecomInqReason(recomInqReasonJJValue.getValCode());
											recomInqReasonJJValueFlag = true;
											break;//退出for循环
										}
									}
									if(!recomInqReasonJJValueFlag)
										throw new Exception("推荐采购方式原因" + ccid.getRecomInqReason() + "不存在！");
								}
							}
						}
						//单一来源
						if("3".equals(ccid.getRecomInqType())){
							if(ccid.getRecomInqVendor() == null || "".equals(ccid.getRecomInqVendor()))
								throw new Exception("推荐采购方式为单一来源时，推荐供应商不能为空！");
							if(ccid.getRecomInqReason() == null || "".equals(ccid.getRecomInqReason()))
								throw new Exception("推荐采购方式为单一来源时，推荐采购方式原因不能为空！");
							else{
								if(ccid.getRecomInqReason() != null && !"".equals(ccid.getRecomInqReason())){
									List<ValueBean> recomInqReasonDYValueList = valueService.getValuesBySetCode("RECOM_INQ_REASON_DY");//原因
									boolean recomInqReasonDYValueFlag = false;
									for (ValueBean recomInqReasonDYValue : recomInqReasonDYValueList) {//原因
										if(ccid.getRecomInqReason().equals(recomInqReasonDYValue.getValName())){
											ccid.setRecomInqReason(recomInqReasonDYValue.getValCode());
											recomInqReasonDYValueFlag = true;
											break;//退出for循环
										}
									}
									if(!recomInqReasonDYValueFlag)
										throw new Exception("推荐采购方式原因" + ccid.getRecomInqReason() + "不存在！");
								}
							}
							if(ccid.getReviewMethod() != null && !"".equals(ccid.getReviewMethod()))
								throw new Exception("当推荐采购方式为单一来源时，评审方法必须为空！");
						}
					}
				}
			}
			//评审方法
			if(ccid.getReviewMethod() != null && !"".equals(ccid.getReviewMethod())){
				List<ValueBean> reviewMethodValueList = valueService.getValuesBySetCode("REVIEW_METHOD");//评审方法
				boolean reviewMethodValueFlag = false;
				for (ValueBean reviewMethodValue : reviewMethodValueList) {//评审方法
					if(ccid.getReviewMethod().equals(reviewMethodValue.getValName())){
						ccid.setReviewMethod(reviewMethodValue.getValCode());
						reviewMethodValueFlag = true;
						break;//退出for循环
					}
				}
				if(!reviewMethodValueFlag)
					throw new Exception("评审方法" + ccid.getReviewMethod() + "不存在！");
			}
			//币种
			if(ccid.getCnyCode() != null && !"".equals(ccid.getCnyCode())){
				List<ValueBean> bzValueList = valueService.getValuesBySetCode("BZ");//币种
				boolean bzValueFlag = false;
				for (ValueBean bzValue : bzValueList) {//币种
					if(ccid.getCnyCode().equals(bzValue.getValName())){
						ccid.setCnyCode(bzValue.getValCode());
						bzValueFlag = true;
						break;//退出for循环
					}
				}
				if(!bzValueFlag)
					throw new Exception("币种" + ccid.getCnyCode() + "不存在！");
			}
			if(ccid.getReqContact() == null || "".equals(ccid.getReqContact()))
				throw new Exception("专业联系人不能为空！");
			else{
				if(ccid.getReqContactTel() == null || "".equals(ccid.getReqContactTel()))
					throw new Exception("专业联系人-固定电话不能为空！");
				else{
					String regExp = "0\\d{2,3}-\\d{7,8}";
					Pattern p = Pattern.compile(regExp);
					Matcher m = p.matcher(ccid.getReqContactTel());
					if(!m.find())
						throw new Exception("专业联系人-固定电话格式不正确！");
				}
				if(ccid.getReqContactPhone() == null || "".equals(ccid.getReqContactPhone()))
					throw new Exception("专业联系人-手机不能为空！");
				else{
					String regExp = "^((13[0-9])|(15[^4])|(18[0,2,3,5-9])|(17[0-8])|(147))\\d{8}$";
					Pattern p = Pattern.compile(regExp);
					Matcher m = p.matcher(ccid.getReqContactPhone());
					if(!m.find())
						throw new Exception("专业联系人-手机格式不正确！");
				}
			}
			if(ccid.getReqCreatePerson() == null || "".equals(ccid.getReqCreatePerson()))
				throw new Exception("物资联系人不能为空！");
			else{
				if(ccid.getReqCreatePersonTel() == null || "".equals(ccid.getReqCreatePersonTel()))
					throw new Exception("物资联系人-固定电话不能为空！");
				else{
					String regExp = "0\\d{2,3}-\\d{7,8}";
					Pattern p = Pattern.compile(regExp);
					Matcher m = p.matcher(ccid.getReqCreatePersonTel());
					if(!m.find())
						throw new Exception("物资联系人-固定电话格式不正确！");
				}
				if(ccid.getReqCreatePersonPhone() == null || "".equals(ccid.getReqCreatePersonPhone()))
					throw new Exception("物资联系人-手机不能为空！");
				else{
					String regExp = "^((13[0-9])|(15[^4])|(18[0,2,3,5-9])|(17[0-8])|(147))\\d{8}$";
					Pattern p = Pattern.compile(regExp);
					Matcher m = p.matcher(ccid.getReqCreatePersonPhone());
					if(!m.find())
						throw new Exception("物资联系人-手机格式不正确！");
				}
			}
			ccid.setCcidId(UUID.randomUUID().toString());
			ccidDao.insertCcidMaterial(ccid);
		} catch (Exception e) {
			e.printStackTrace();
			throw e;
		}
	}
	@Override
	public void checkConstructionAndService(Ccid ccid) throws Exception {
		try {
			String comName = ccid.getComId();//项目单位名称（账套名称）
			//判断项目单位是否存在
			if(ccid.getComId() == null || "".equals(ccid.getComId()))
				throw new Exception("项目单位不能为空！");
			else{
				String comId = ccidDao.selectOrgIdByOrgName(ccid.getComId());
				if(comId == null || "".equals(comId))
					throw new Exception("项目单位“" + ccid.getComId() + "”不存在！");
				else
					ccid.setComId(comId);
			}
			//判断当前用户是否配置组织信息
			if(ccid.getCreatedBy() == null || "".equals(ccid.getCreatedBy()))
				throw new Exception("当前用户不能为空！");
			else{
				HashMap<String,String> userMap = new HashMap<String,String>();
				userMap.put("createdBy",ccid.getCreatedBy());
				userMap.put("comId",ccid.getComId());
				String userInfo = ccidDao.whetherExistOrgInfo(userMap);
				if(userInfo == null || "".equals(userInfo))
					throw new Exception("当前用户没有当前项目单位的权限，请联系管理员配置组织信息！");
				else
					ccid.setCreatedBy(userInfo);
			}
			//判断项目单位配置信息	
			HashMap<String,String> orgMap = ccidDao.selectOtherOrgInfoByOrgId(ccid.getComId());
			if(orgMap == null || "".equals(orgMap))
				throw new Exception("项目单位尚未配置配送中心、分公司、集团信息，请联系管理员配置相关信息！");
			else{
				if("0".equals(orgMap.get("orgId1")) || "0".equals(orgMap.get("orgId2"))
						|| "0".equals(orgMap.get("orgId3")) || "0".equals(orgMap.get("orgId4")))
					throw new Exception("项目单位尚未配置配送中心、分公司、集团信息，请联系管理员配置相关信息！");
			}
			//判断专业部门是否为空
			if(ccid.getCompanyDeptId() == null || "".equals(ccid.getCompanyDeptId()))
				throw new Exception("专业部门不能为空！");
			else{
				HashMap<String,String> deptMap = new HashMap<String,String>();
				deptMap.put("companyDeptId",ccid.getCompanyDeptId());
				deptMap.put("comName",comName);
				String deptId = ccidDao.selectDeptIdByDeptName(deptMap);
				if(deptId == null || "".equals(deptId))
					throw new Exception("该项目单位所属分子公司下没有“" + ccid.getCompanyDeptId() + "”部门！");
				else
					ccid.setCompanyDeptId(deptId);;
			}
			//判断项目部门是否为空
			if(ccid.getDemandDp() == null || "".equals(ccid.getDemandDp()))
				throw new Exception("项目部门不能为空！");
			//项目名称
			if(ccid.getMtName() == null || "".equals(ccid.getMtName()))
				throw new Exception("项目名称不能为空！");
			else
				if(ccid.getMtName().length() > 46)
					throw new Exception("项目名称长度不能超过46个字符！");
			//项目类别
			if(ccid.getMtType() == null || "".equals(ccid.getMtType()))
				throw new Exception("项目类别不能为空！");
			else{
				List<ValueBean> proTypeValueList = valueService.getValuesBySetCode("PRO_TYPE");//项目类别
				boolean proTypeValueFlag = false;
				for (ValueBean bzValue : proTypeValueList) {
					if(ccid.getMtType().equals(bzValue.getValName())){
						ccid.setMtType(bzValue.getValCode());
						proTypeValueFlag = true;
						break;//退出for循环
					}
				}
				if(!proTypeValueFlag)
					throw new Exception("项目类别" + ccid.getMtType() + "不存在！");
			}
			//项目分类
			if(ccid.getReqPlanSort() == null || "".equals(ccid.getReqPlanSort()))
				throw new Exception("项目分类不能为空！");
			else{
				if("施工类".equals(ccid.getReqPlanSort()))
					ccid.setReqPlanSort("2");
				if("服务类".equals(ccid.getReqPlanSort()))
					ccid.setReqPlanSort("3");
				else
					throw new Exception("项目类别" + ccid.getReqPlanSort() + "不存在！");
			}
			//项目预算
			if(ccid.getBudAmount() == null || "".equals(ccid.getBudAmount()) || Integer.parseInt(ccid.getBudAmount()) <= 0)
				throw new Exception("项目预算最小值为0.01！");
			//计划类别
			if(ccid.getProjectType() == null || "".equals(ccid.getProjectType()))
				throw new Exception("计划类别不能为空！");
			else{
				List<ValueBean> reqPlanCategoryValueList = valueService.getValuesBySetCode("REQ_PLAN_CATEGORY");//计划类别
				boolean reqPlanCategoryValueFlag = false;
				for (ValueBean reqPlanCategoryValue : reqPlanCategoryValueList) {//计划类别
					if(ccid.getProjectType().equals(reqPlanCategoryValue.getValName())){
						ccid.setProjectType(reqPlanCategoryValue.getValCode());
						reqPlanCategoryValueFlag = true;
						break;//退出for循环
					}
				}
				if(!reqPlanCategoryValueFlag)
					throw new Exception("计划类别" + ccid.getProjectType() + "不存在！");
			}
			//计划类型
			if(ccid.getReqPlanType() == null || "".equals(ccid.getReqPlanType()))
				throw new Exception("计划类型不能为空！");
			else{
				List<ValueBean> reqPlanTypeValueList = valueService.getValuesBySetCode("REQ_PLAN_TYPE");//计划类型
				boolean reqPlanTypeValueFlag = false;
				for (ValueBean reqPlanTypeValue : reqPlanTypeValueList) {//计划类型
					if(ccid.getReqPlanType().equals(reqPlanTypeValue.getValName())){
						ccid.setReqPlanType(reqPlanTypeValue.getValCode());
						reqPlanTypeValueFlag = true;
						break;//退出for循环
					}
				}
				if(!reqPlanTypeValueFlag)
					throw new Exception("计划类型" + ccid.getReqPlanType() + "不存在！");
				//紧急计划、自行采购
				if("2".equals(ccid.getReqPlanType()) || "4".equals(ccid.getReqPlanType())){
					if(ccid.getZhicaiFs() == null || "".equals(ccid.getZhicaiFs()))
						throw new Exception("当计划类型为紧急计划、自行采购时,采购方式不能为空！");
					else{
						List<ValueBean> recomInqTypeValueList = valueService.getValuesBySetCode("RECOM_INQ_TYPE");//计划类型
						boolean recomInqTypeValueFlag = false;
						for (ValueBean recomInqTypeValue : recomInqTypeValueList) {//计划类型
							if(ccid.getZhicaiFs().equals(recomInqTypeValue.getValName())){
								ccid.setZhicaiFs(recomInqTypeValue.getValCode());
								recomInqTypeValueFlag = true;
								break;//退出for循环
							}
						}
						if(!recomInqTypeValueFlag)
							throw new Exception("采购方式" + ccid.getZhicaiFs() + "不存在！");
					}
					if(String.valueOf(ccid.getInqAmount()) == null || "".equals(String.valueOf(ccid.getInqAmount())))
						throw new Exception("当计划类型为紧急计划、自行采购时,采购金额不能为空！");
					if(ccid.getAttribute10() == null || "".equals(ccid.getAttribute10()))
						throw new Exception("当计划类型为紧急计划、自行采购时,供应商不能为空！");
				}
				//紧急计划
				if("2".equals(ccid.getReqPlanType())){
					if(ccid.getEmergencyReason() == null || "".equals(ccid.getEmergencyReason()))
						throw new Exception("当计划类型为紧急计划,必须填写紧急计划原因！");
					else{
						boolean emergencyReasonFlag = false;
						List<ValueBean> emergencyReasonValueList = valueService.getValuesBySetCode("EMERGENCY_REASON");//紧急计划原因
						for (ValueBean emergencyReasonValue : emergencyReasonValueList) {//计划类型
							if(ccid.getEmergencyReason().equals(emergencyReasonValue.getValName())){
								ccid.setEmergencyReason(emergencyReasonValue.getValCode());
								emergencyReasonFlag = true;
								break;//退出for循环
							}
						}
						if(!emergencyReasonFlag)
							throw new Exception("紧急计划原因" + ccid.getEmergencyReason() + "不存在！");
					}
				}
				//月度计划
				if("1".equals(ccid.getReqPlanType())){
					if(ccid.getPrMonth() != null && !"".equals(ccid.getPrMonth())){
						if(ccid.getPrMonth().length() != 7)
							throw new Exception("计划月份格式必须为" + "“yyyy-mm”");
						else{
							if(!"-".equals(ccid.getPrMonth().substring(4,5))
									|| Integer.valueOf(ccid.getPrMonth().substring(5,7)) > 12
									|| Integer.valueOf(ccid.getPrMonth().substring(5,7)) < 1)
								throw new Exception("计划月份格式不正确！");
						}
					}
				}
			}
			if("1".equals(ccid.getReqPlanType()) || "3".equals(ccid.getReqPlanType())){//月度上报和年度上报主要区别就是计划类型不同
				//推荐采购方式
				if(ccid.getRecomInqType() == null || "".equals(ccid.getRecomInqType()))
					throw new Exception("推荐采购方式不能为空！");
				else{
					List<ValueBean> recomInqTypeValueList = valueService.getValuesBySetCode("RECOM_INQ_TYPE");//推荐采购方式
					boolean recomInqTypeValueFlag = false;
					for (ValueBean recomInqTypeValue : recomInqTypeValueList) {//推荐采购方式
						if(ccid.getRecomInqType().equals(recomInqTypeValue.getValName())){
							ccid.setRecomInqType(recomInqTypeValue.getValCode());
							recomInqTypeValueFlag = true;
							break;//退出for循环
						}
					}
					if(!recomInqTypeValueFlag)
						throw new Exception("推荐采购方式" + ccid.getRecomInqType() + "不存在，只有询价，竞争性谈判，单一来源，长协采购！");
					else{
						//竞争性谈判
						if("2".equals(ccid.getRecomInqType())){
							if(ccid.getRecomInqReason() == null || "".equals(ccid.getRecomInqReason()))
								throw new Exception("推荐采购方式为竞争性谈判时，推荐采购方式原因不能为空！");
							else{
								if(ccid.getRecomInqReason() != null && !"".equals(ccid.getRecomInqReason())){
									List<ValueBean> recomInqReasonJJValueList = valueService.getValuesBySetCode("RECOM_INQ_REASON_JJ");//原因
									boolean recomInqReasonJJValueFlag = false;
									for (ValueBean recomInqReasonJJValue : recomInqReasonJJValueList) {//原因
										if(ccid.getRecomInqReason().equals(recomInqReasonJJValue.getValName())){
											ccid.setRecomInqReason(recomInqReasonJJValue.getValCode());
											recomInqReasonJJValueFlag = true;
											break;//退出for循环
										}
									}
									if(!recomInqReasonJJValueFlag)
										throw new Exception("推荐采购方式原因" + ccid.getRecomInqReason() + "不存在！");
								}
							}
							if(ccid.getReviewMethod() == null || "".equals(ccid.getReviewMethod()))
								throw new Exception("评审方法不能为空！");
							else{
								List<ValueBean> reviewMethodValueList = valueService.getValuesBySetCode("REVIEW_METHOD");//评审方法
								boolean reviewMethodValueFlag = false;
								for (ValueBean reviewMethodValue : reviewMethodValueList) {//评审方法
									if(ccid.getReviewMethod().equals(reviewMethodValue.getValName())){
										ccid.setReviewMethod(reviewMethodValue.getValCode());
										reviewMethodValueFlag = true;
										break;//退出for循环
									}
								}
								if(!reviewMethodValueFlag)
									throw new Exception("评审方法" + ccid.getReviewMethod() + "不存在！");
							}
						}
						//单一来源
						if("3".equals(ccid.getRecomInqType())){
							if(ccid.getRecomInqVendor() == null || "".equals(ccid.getRecomInqVendor()))
								throw new Exception("推荐采购方式为单一来源时，推荐供应商不能为空！");
							if(ccid.getRecomInqReason() == null || "".equals(ccid.getRecomInqReason()))
								throw new Exception("推荐采购方式为单一来源时，推荐采购方式原因不能为空！");
							else{
								if(ccid.getRecomInqReason() != null && !"".equals(ccid.getRecomInqReason())){
									List<ValueBean> recomInqReasonDYValueList = valueService.getValuesBySetCode("RECOM_INQ_REASON_DY");//原因
									boolean recomInqReasonDYValueFlag = false;
									for (ValueBean recomInqReasonDYValue : recomInqReasonDYValueList) {//原因
										if(ccid.getRecomInqReason().equals(recomInqReasonDYValue.getValName())){
											ccid.setRecomInqReason(recomInqReasonDYValue.getValCode());
											recomInqReasonDYValueFlag = true;
											break;//退出for循环
										}
									}
									if(!recomInqReasonDYValueFlag)
										throw new Exception("推荐采购方式原因" + ccid.getRecomInqReason() + "不存在！");
								}
							}
							if(ccid.getReviewMethod() != null && !"".equals(ccid.getReviewMethod()))
								throw new Exception("当推荐采购方式为单一来源时，评审方法必须为空！");
						}
						//询价采购
						if("1".equals(ccid.getRecomInqType())){
							if(ccid.getReviewMethod() == null || "".equals(ccid.getReviewMethod()))
								throw new Exception("评审方法不能为空！");
							else{
								List<ValueBean> reviewMethodValueList = valueService.getValuesBySetCode("REVIEW_METHOD");//评审方法
								boolean reviewMethodValueFlag = false;
								for (ValueBean reviewMethodValue : reviewMethodValueList) {//评审方法
									if(ccid.getReviewMethod().equals(reviewMethodValue.getValName())){
										ccid.setReviewMethod(reviewMethodValue.getValCode());
										reviewMethodValueFlag = true;
										break;//退出for循环
									}
								}
								if(!reviewMethodValueFlag)
									throw new Exception("评审方法" + ccid.getReviewMethod() + "不存在！");
							}
						}
					}
				}
			}
			//费用类型
			if(ccid.getCostSource() != null && !"".equals(ccid.getCostSource())){
				List<ValueBean> fyTypeValueList = valueService.getValuesBySetCode("FY_TYPE");//费用类型
				boolean fyTypeValueFlag = false;
				for (ValueBean fyTypeValue : fyTypeValueList) {//费用类型
					if(ccid.getCostSource().equals(fyTypeValue.getValName())){
						ccid.setCostSource(fyTypeValue.getValCode());
						fyTypeValueFlag = true;
						break;//退出for循环
					}
				}
				if(!fyTypeValueFlag)
					throw new Exception("费用类型" + ccid.getCostSource() + "不存在！");
			}
			//付款方式
			if(ccid.getPayWay() != null && !"".equals(ccid.getPayWay())){
				List<ValueBean> fkfsValueList = valueService.getValuesBySetCode("FKFS");//付款方式
				boolean fkfsValueFlag = false;
				for (ValueBean fkfsValue : fkfsValueList) {//币种
					if(ccid.getPayWay().equals(fkfsValue.getDescription())){
						ccid.setPayWay(fkfsValue.getValCode());
						fkfsValueFlag = true;
						break;//退出for循环
					}
				}
				if(!fkfsValueFlag)
					throw new Exception("付款方式" + ccid.getPayWay() + "不存在！");
			}
			//支付方式
			if(ccid.getPayMethod() != null && !"".equals(ccid.getPayMethod())){
				List<ValueBean> zffsValueList = valueService.getValuesBySetCode("ZFFS");//付款方式
				boolean zffsValueFlag = false;
				for (ValueBean zffsValue : zffsValueList) {//币种
					if(ccid.getPayMethod().equals(zffsValue.getValName())){
						ccid.setPayMethod(zffsValue.getValCode());
						zffsValueFlag = true;
						break;//退出for循环
					}
				}
				if(!zffsValueFlag)
					throw new Exception("支付方式" + ccid.getPayMethod() + "不存在！");
			}
			ccid.setCcidId(UUID.randomUUID().toString());
			ccidDao.insertCcidService(ccid);
		} catch (Exception e) {
			e.printStackTrace();
			throw e;
		}
	}
}